package com.jiangyg.mall.search.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * 类描述：Sku索引
 *
 * @author jiangyg
 * @version 4.0
 * @date 2022-11-29
 */
@Data
@NoArgsConstructor
@EqualsAndHashCode
public class SkuIndexDTO implements Serializable {

    private static final long serialVersionUID = 5767946246878205610L;

    /**
     * skuId
     */
    private Long id;

    /**
     * 标题
     */
    private String title;

    /**
     * 副标题
     */
    private String subtitle;

    /**
     * 价格
     */
    private double price;

    /**
     * 销量
     */
    private Long sales;

    /**
     * Spu信息
     */
    private Spu spu;

    /**
     * 图片集
     */
    private List<Image> images;

    /**
     * 品牌信息
     */
    private Brand brand;

    /**
     * 分类信息
     */
    private Category category;

    /**
     * 基本属性集合
     */
    private List<BaseAttr> baseAttrs;

    /**
     * 销售属性集合
     */
    private List<SaleAttr> saleAttrs;

    /**
     * 基本属性分组信息
     */
    private List<BaseAttrGroup> baseAttrGroups;

    /**
     * 是否有库存
     */
    // TODO 采购完成之后，也需要动态更新索引
    // TODO 如果商品库存没有了，需要触发更新索引，可以在减库存时，使用消息队列进行触发
    private boolean inStock;

    /**
     * 类描述：Spu信息
     */
    @Data
    @NoArgsConstructor
    @EqualsAndHashCode
    public static class Spu implements Serializable {

        private static final long serialVersionUID = -7478910193192110792L;

        /**
         * spuId
         */
        private Long id;

        /**
         * 商品介绍
         */
        private String introduce;

        public Spu(Long id) {
            this.id = id;
        }

    }

    /**
     * 类描述：图片信息
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @EqualsAndHashCode
    public static class Image implements Serializable {

        private static final long serialVersionUID = 2832606547219819707L;

        /**
         * 图片地址
         */
        private String url;

        /**
         * 默认图[0 - 不是默认图，1 - 是默认图]
         */
        private boolean isDefault;
    }

    /**
     * 类描述：品牌信息
     */
    @Data
    @NoArgsConstructor
    @EqualsAndHashCode
    public static class Brand implements Serializable {

        private static final long serialVersionUID = -200418391307372838L;

        /**
         * 品牌ID
         */
        private Long id;

        /**
         * 品牌名称
         */
        private String name;

        /**
         * 品牌logo
         */
        private String logo;

        public Brand(Long id) {
            this.id = id;
        }

    }

    /**
     * 类描述：分类信息
     */
    @Data
    @NoArgsConstructor
    @EqualsAndHashCode
    public static class Category implements Serializable {

        private static final long serialVersionUID = 5811757432128823086L;

        /**
         * 分类ID
         */
        private Long id;

        /**
         * 分类名称
         */
        private String name;

        public Category(Long id) {
            this.id = id;
        }

    }

    /**
     * 类描述：属性信息
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @EqualsAndHashCode
    public static class BaseAttr implements Serializable {

        private static final long serialVersionUID = 2254019840331576030L;

        /**
         * 属性ID
         */
        private Long id;

        /**
         * 属性名称
         */
        private String name;

        /**
         * 属性值
         */
        private String value;

        /**
         * 是否可检索
         */
        private boolean searchable;

    }

    /**
     * 类描述：销售属性
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @EqualsAndHashCode
    public static class SaleAttr implements Serializable {

        private static final long serialVersionUID = 5103538834081821690L;

        /**
         * 属性ID
         */
        private Long id;

        /**
         * 属性名称
         */
        private String name;

        /**
         * 属性值
         */
        private String value;

        /**
         * 是否可检索
         */
        private Long skuId;

    }

    /**
     * 类描述：属性分组
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @EqualsAndHashCode
    public static class BaseAttrGroup implements Serializable {

        private static final long serialVersionUID = 214651825027065553L;

        /**
         * 分组ID
         */
        private Long id;

        /**
         * 分组名称
         */
        private String name;

        /**
         * 分组图标
         */
        private String icon;

        /**
         * 属性ID集合
         */
        private List<Long> attrIds;

    }

}
